#ifndef __TEMPLATE_METHOD_H__
#define __TEMPLATE_METHOD_H__
#include <iostream>
#include <string>

/**
 * 柠檬茶和咖啡的的冲泡方式
以柠檬茶和咖啡的的冲泡方式为例子，它们的冲泡方式非常类似。

咖啡冲泡方式：

（1）把水煮沸；

（2）把咖啡倒进杯子；

（3）用沸水冲泡咖啡；

（4）加糖和牛奶。

柠檬茶冲泡方法：

（1）把水煮沸；

（2）把茶叶倒进杯子；

（3）用沸水冲泡茶；

（4）加柠檬。
*/

class CoffeinBeverage{
public:
    virtual ~CoffeinBeverage()=default;
    void prepare_recipe();
private:
    virtual void  brew() = 0;
    virtual void add_condiments()=0;
protected:
    void boil_water();
    void pour_in_cup();

};

class Coffee : public CoffeinBeverage{
private:
    virtual void brew();
    virtual void add_condiments();
};

class Tea : public CoffeinBeverage{
private:
    virtual void brew();
    virtual void add_condiments();
};


#endif